package com.epic.daemon;

import com.epic.utils.Constants;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.File;

public class Daemon {
    private static Logger logger = LogManager.getLogger(Daemon.class);

    public Daemon(){
    }
    public static long init(long sum,long fileNewTime){
        long ret = 0;
        if (sum %5 == 0){
            File f = new File(Constants.configFile);
            // reload config file
            ret = f.lastModified();
            if (fileNewTime != ret){
            }
        }else{

        }
        return ret;
    }

    public static final class MonitorThread implements Runnable{
        @Override
        public void run() {
            while(true){

                // to do loop

            }
        }
    }

    public static final class TestThread extends  Thread{
        public TestThread(String name){
            setDaemon(true);
            setName(name);
        }
        @Override
        public void run() {
            while(true){

                // to do loop

            }
        }
    }
    public static void main(String[] args) {


        long fileOldTime = 1l;
        long fileCurrTime = 1l;
        long sum = 1l;

        Daemon daemon = new Daemon();

        MonitorThread monitorThread = new MonitorThread();
        new Thread(monitorThread).start();

        TestThread testThread = new TestThread("test");
        new Thread(testThread).start();

        while(true){
            try {
                // to do
                fileOldTime = daemon.init(sum,fileCurrTime);
                fileCurrTime = fileOldTime;
                sum += 1;
                Thread.sleep(1000 * 60);
            }catch (Exception e){
                logger.error(e.getMessage());
            }
        }


    }
}

/**
 * Thread and Runnable 区别已经有大量的辩论，哪一个更好。嗯，我也试着找出答案，下面是我的研究：
 * 1)  实现Runnable接口是首选方法。在这里，您并不需要修改Thread类的行为。你只是给线程一些东西运行。这意味着组合是最好的方式。
 * 2)  Java只支持单一继承，所以你只能继承一个类。
 * 3)  用接口的方式将你的代码和线程实现分离，更加清晰。
 * 4)  实现Runnable使你的类更灵活。如果您继承Thread类，那么您所做的操作总是处于一个线程中。然而如果你采用实现Runnable接口，
 * 您可以在一个线程中运行它，或者将它传递给某种执行器（executor），或者只是将它作为一个单线程应用程序中的任务传递给它。
 * 5)  通过继承Thread类，每个线程都有一个相关联的唯一对象，而实现Runnable接口，多线程可以共享同一个Runnable实例。
 *
 * 遇到问题：maven-assembly-plugin pom.xml里面报not find 需要在pom.xml里面添加 依赖
 * <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-assembly-plugin -->
 * <dependency>
 *     <groupId>org.apache.maven.plugins</groupId>
 *     <artifactId>maven-assembly-plugin</artifactId>
 *     <version>3.3.0</version>
 * </dependency>
 */